package com.apply.leetcode.puzzle203;

/**
 * 使用虚拟头节点
 * 删除链表中含有的全部指定元素的节点
 */
public class Solution2 {
    public ListNode removeElements(ListNode head, int val) {
        /*
            创建虚拟几点，让虚拟节点的下一个节点指向你传入的
            链表，这样你传入的链表的全部的节点包括头节点就都
            有头几点，就不要需要再对头节点做过多的处理.
            把虚拟节点作为prev,从他开始遍历就行了
         */
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;

        ListNode prev = dummyHead;
        while (prev.next != null) {
            if (prev.next.val == val) {
                prev.next =  prev.next.next;
            }else {
                // 指针移动
                prev = prev.next;
            }
        }
        return dummyHead.next;
    }

    public static void main(String[] args) {
        // 把数组转化为链表并打印
        int[] nums = {1,2,6,3,4,5,6};
        ListNode head = new ListNode(nums);
        System.out.println(head);

        // 删除全部指定值的节点
        Solution2 solution2 = new Solution2();
        ListNode res = solution2.removeElements(head, 6);
        System.out.println(res);
    }
}
